package com.sun.aop;

import com.sun.annotation.WR;
import com.sun.constant.DataSourceNames;
import com.sun.source.DynamicDataSource;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

@Component
@Aspect
public class DynamicDataSourceAspect {
    // 前置通知
    @Before("within(com.sun.service.impl.*) && @annotation(wr)")
    public void before(JoinPoint joinPoint, WR wr){
        // 获取注解中指定的数据源名称
        String dataSourceName = wr.value();
        // 校验数据源名称是否合法
        if (DataSourceNames.FIRST.equals(dataSourceName) || DataSourceNames.SECOND.equals(dataSourceName)) {
            // 设置当前线程的数据源
            DynamicDataSource.setDataSource(dataSourceName);
            System.out.println("切换到数据源：" + dataSourceName);
        } else {
            // 默认使用主数据源
            DynamicDataSource.setDataSource(DataSourceNames.FIRST);
            System.out.println("数据源名称不合法，使用默认数据源：" + DataSourceNames.FIRST);
        }
    }
}